From 82998e6b4eabe78e1074728390f484edf527a0a5 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Fri, 19 Oct 2001 19:47:19 +0000 Subject: [PATCH] Really remove GtkPacker. --- gtk/gtkpacker.c | 1235 ----------------------------------------------- gtk/gtkpacker.h | 149 ------ 2 files changed, 1384 deletions(-) delete mode 100644 gtk/gtkpacker.c delete mode 100644 gtk/gtkpacker.h diff --git a/gtk/gtkpacker.c b/gtk/gtkpacker.c deleted file mode 100644 index 17dc385f7e..0000000000 --- a/gtk/gtkpacker.c +++ /dev/null @@ -1,1235 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * GtkPacker Widget - * Copyright (C) 1998 Shawn T. Amundson, James S. Mitchell, Michael L. Staiger - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -/* - * This file contains modified code derived from Tk 8.0. Below is the header of - * the relevant file. The file 'license.terms' is included inline below. - * - * tkPack.c -- - * - * This file contains code to implement the "packer" - * geometry manager for Tk. - * - * Copyright (c) 1990-1994 The Regents of the University of California. - * Copyright (c) 1994-1995 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * SCCS: @(#) tkPack.c 1.64 96/05/03 10:51:52 - * - * The file license.terms is below. NOTE: THE FOLLOWING APPLIES ONLY TO - * PORTIONS DERIVED FROM TK 8.0. THE LICENSE FOR THIS FILE IS LGPL, AS - * STATED ABOVE AND ALLOWED BELOW. --- BEGIN license.terms -- -This software is copyrighted by the Regents of the University of -California, Sun Microsystems, Inc., and other parties. The following -terms apply to all files associated with the software unless explicitly -disclaimed in individual files. - -The authors hereby grant permission to use, copy, modify, distribute, -and license this software and its documentation for any purpose, provided -that existing copyright notices are retained in all copies and that this -notice is included verbatim in any distributions. No written agreement, -license, or royalty fee is required for any of the authorized uses. -Modifications to this software may be copyrighted by their authors -and need not follow the licensing terms described here, provided that -the new terms are clearly indicated on the first page of each file where -they apply. - -IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY -FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES -ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY -DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. - -THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE -IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE -NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR -MODIFICATIONS. - -GOVERNMENT USE: If you are acquiring this software on behalf of the -U.S. government, the Government shall have only "Restricted Rights" -in the software and related documentation as defined in the Federal -Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you -are acquiring the software on behalf of the Department of Defense, the -software shall be classified as "Commercial Computer Software" and the -Government shall have only "Restricted Rights" as defined in Clause -252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the -authors grant the U.S. Government and others acting in its behalf -permission to use and distribute the software in accordance with the -terms specified in this license. --- END license.terms -- - * - */ - -/* - * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - - - -#include "gtkpacker.h" -#include "gtkintl.h" - -enum { - PROP_0, - PROP_SPACING, - PROP_D_BORDER_WIDTH, - PROP_D_PAD_X, - PROP_D_PAD_Y, - PROP_D_IPAD_X, - PROP_D_IPAD_Y -}; - -enum { - CHILD_ARG_0, - CHILD_ARG_SIDE, - CHILD_ARG_ANCHOR, - CHILD_ARG_EXPAND, - CHILD_ARG_FILL_X, - CHILD_ARG_FILL_Y, - CHILD_ARG_USE_DEFAULT, - CHILD_ARG_BORDER_WIDTH, - CHILD_ARG_PAD_X, - CHILD_ARG_PAD_Y, - CHILD_ARG_I_PAD_X, - CHILD_ARG_I_PAD_Y, - CHILD_ARG_POSITION -}; - -static void gtk_packer_class_init (GtkPackerClass *klass); -static void gtk_packer_init (GtkPacker *packer); -static void gtk_packer_size_request (GtkWidget *widget, - GtkRequisition *requisition); -static void gtk_packer_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); -static void gtk_packer_container_add (GtkContainer *container, - GtkWidget *child); -static void gtk_packer_remove (GtkContainer *container, - GtkWidget *widget); -static void gtk_packer_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data); -static void gtk_packer_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void gtk_packer_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); -static void gtk_packer_get_child_arg (GtkContainer *container, - GtkWidget *child, - GtkArg *arg, - guint arg_id); -static void gtk_packer_set_child_arg (GtkContainer *container, - GtkWidget *child, - GtkArg *arg, - guint arg_id); -static GtkType gtk_packer_child_type (GtkContainer *container); - - -static GtkPackerClass *parent_class; - -GtkType -gtk_packer_get_type (void) -{ - static GtkType packer_type = 0; - - if (!packer_type) - { - static const GtkTypeInfo packer_info = - { - "GtkPacker", - sizeof (GtkPacker), - sizeof (GtkPackerClass), - (GtkClassInitFunc) gtk_packer_class_init, - (GtkObjectInitFunc) gtk_packer_init, - /* reserved_1 */ NULL, - /* reserved_2 */ NULL, - (GtkClassInitFunc) NULL, - }; - - packer_type = gtk_type_unique (GTK_TYPE_CONTAINER, &packer_info); - } - - return packer_type; -} - -static void -gtk_packer_class_init (GtkPackerClass *klass) -{ - GtkObjectClass *object_class; - GObjectClass *gobject_class; - GtkWidgetClass *widget_class; - GtkContainerClass *container_class; - - gobject_class = G_OBJECT_CLASS (klass); - object_class = (GtkObjectClass*) klass; - widget_class = (GtkWidgetClass*) klass; - container_class = (GtkContainerClass*) klass; - parent_class = gtk_type_class (GTK_TYPE_CONTAINER); - - gtk_container_add_child_arg_type ("GtkPacker::side", GTK_TYPE_SIDE_TYPE, GTK_ARG_READWRITE, CHILD_ARG_SIDE); - gtk_container_add_child_arg_type ("GtkPacker::anchor", GTK_TYPE_ANCHOR_TYPE, GTK_ARG_READWRITE, CHILD_ARG_ANCHOR); - gtk_container_add_child_arg_type ("GtkPacker::expand", GTK_TYPE_BOOL, GTK_ARG_READWRITE, CHILD_ARG_EXPAND); - gtk_container_add_child_arg_type ("GtkPacker::fill_x", GTK_TYPE_BOOL, GTK_ARG_READWRITE, CHILD_ARG_FILL_X); - gtk_container_add_child_arg_type ("GtkPacker::fill_y", GTK_TYPE_BOOL, GTK_ARG_READWRITE, CHILD_ARG_FILL_Y); - gtk_container_add_child_arg_type ("GtkPacker::use_default", GTK_TYPE_BOOL, GTK_ARG_READWRITE, CHILD_ARG_USE_DEFAULT); - gtk_container_add_child_arg_type ("GtkPacker::border_width", GTK_TYPE_UINT, GTK_ARG_READWRITE, CHILD_ARG_BORDER_WIDTH); - gtk_container_add_child_arg_type ("GtkPacker::pad_x", GTK_TYPE_UINT, GTK_ARG_READWRITE, CHILD_ARG_PAD_X); - gtk_container_add_child_arg_type ("GtkPacker::pad_y", GTK_TYPE_UINT, GTK_ARG_READWRITE, CHILD_ARG_PAD_Y); - gtk_container_add_child_arg_type ("GtkPacker::ipad_x", GTK_TYPE_UINT, GTK_ARG_READWRITE, CHILD_ARG_I_PAD_X); - gtk_container_add_child_arg_type ("GtkPacker::ipad_y", GTK_TYPE_UINT, GTK_ARG_READWRITE, CHILD_ARG_I_PAD_Y); - gtk_container_add_child_arg_type ("GtkPacker::position", GTK_TYPE_INT, GTK_ARG_READWRITE, CHILD_ARG_POSITION); - - gobject_class->set_property = gtk_packer_set_property; - gobject_class->get_property = gtk_packer_get_property; - - widget_class->size_request = gtk_packer_size_request; - widget_class->size_allocate = gtk_packer_size_allocate; - - container_class->add = gtk_packer_container_add; - container_class->remove = gtk_packer_remove; - container_class->forall = gtk_packer_forall; - container_class->child_type = gtk_packer_child_type; - container_class->get_child_arg = gtk_packer_get_child_arg; - container_class->set_child_arg = gtk_packer_set_child_arg; - - g_object_class_install_property (gobject_class, - PROP_SPACING, - g_param_spec_uint ("spacing", - _("Spacing"), - _("Width between child elements"), - 0, - G_MAXUINT, - 0, - G_PARAM_READWRITE)); - - g_object_class_install_property (gobject_class, - PROP_D_BORDER_WIDTH, - g_param_spec_uint ("default_border_width", - _("Default Border"), - _("Default border width"), - 0, - G_MAXUINT, - 0, - G_PARAM_READWRITE)); - - g_object_class_install_property (gobject_class, - PROP_D_PAD_X, - g_param_spec_uint ("default_pad_x", - _("Default Pad X"), - _("Default horizontal padding"), - 0, - G_MAXUINT, - 0, - G_PARAM_READWRITE)); - - g_object_class_install_property (gobject_class, - PROP_D_PAD_Y, - g_param_spec_uint ("default_pad_y", - _("Default Pad Y"), - _("Default vertical padding"), - 0, - G_MAXUINT, - 0, - G_PARAM_READWRITE)); - - g_object_class_install_property (gobject_class, - PROP_D_IPAD_X, - g_param_spec_uint ("default_ipad_x", - _("Default IPad X"), - _("Default horizontal internal padding"), - 0, - G_MAXUINT, - 0, - G_PARAM_READWRITE)); - - g_object_class_install_property (gobject_class, - PROP_D_IPAD_Y, - g_param_spec_uint ("default_ipad_y", - _("Default IPad Y"), - _("Default vertical internal padding"), - 0, - G_MAXUINT, - 0, - G_PARAM_READWRITE)); - -} - -static void -gtk_packer_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - GtkPacker *packer; - - packer = GTK_PACKER (object); - - switch (prop_id) - { - case PROP_SPACING: - gtk_packer_set_spacing (packer, g_value_get_uint (value)); - break; - case PROP_D_BORDER_WIDTH: - gtk_packer_set_default_border_width (packer, g_value_get_uint (value)); - break; - case PROP_D_PAD_X: - gtk_packer_set_default_pad (packer, - g_value_get_uint (value), - packer->default_pad_y); - break; - case PROP_D_PAD_Y: - gtk_packer_set_default_pad (packer, - packer->default_pad_x, - g_value_get_uint (value)); - break; - case PROP_D_IPAD_X: - gtk_packer_set_default_ipad (packer, - g_value_get_uint (value), - packer->default_i_pad_y); - break; - case PROP_D_IPAD_Y: - gtk_packer_set_default_ipad (packer, - packer->default_i_pad_x, - g_value_get_uint (value)); - break; - default: - break; - } -} - -static void -gtk_packer_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - GtkPacker *packer; - - packer = GTK_PACKER (object); - - switch (prop_id) - { - case PROP_SPACING: - g_value_set_uint (value, packer->spacing); - break; - case PROP_D_BORDER_WIDTH: - g_value_set_uint (value, packer->default_border_width); - break; - case PROP_D_PAD_X: - g_value_set_uint (value, packer->default_pad_x); - break; - case PROP_D_PAD_Y: - g_value_set_uint (value, packer->default_pad_y); - break; - case PROP_D_IPAD_X: - g_value_set_uint (value, packer->default_i_pad_x); - break; - case PROP_D_IPAD_Y: - g_value_set_uint (value, packer->default_i_pad_y); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - -static GtkType -gtk_packer_child_type (GtkContainer *container) -{ - return GTK_TYPE_WIDGET; -} - -static void -gtk_packer_set_child_arg (GtkContainer *container, - GtkWidget *child, - GtkArg *arg, - guint arg_id) -{ - GtkPacker *packer; - GtkPackerChild *child_info = NULL; - - packer = GTK_PACKER (container); - - if (arg_id != CHILD_ARG_POSITION) - { - GList *list; - - list = packer->children; - while (list) - { - child_info = list->data; - if (child_info->widget == child) - break; - - list = list->next; - } - if (!list) - return; - } - - switch (arg_id) - { - case CHILD_ARG_SIDE: - child_info->side = GTK_VALUE_ENUM (*arg); - break; - case CHILD_ARG_ANCHOR: - child_info->anchor = GTK_VALUE_ENUM (*arg); - break; - case CHILD_ARG_EXPAND: - if (GTK_VALUE_BOOL (*arg)) - child_info->options |= GTK_PACK_EXPAND; - else - child_info->options &= ~GTK_PACK_EXPAND; - break; - case CHILD_ARG_FILL_X: - if (GTK_VALUE_BOOL (*arg)) - child_info->options |= GTK_FILL_X; - else - child_info->options &= ~GTK_FILL_X; - break; - case CHILD_ARG_FILL_Y: - if (GTK_VALUE_BOOL (*arg)) - child_info->options |= GTK_FILL_Y; - else - child_info->options &= ~GTK_FILL_Y; - break; - case CHILD_ARG_USE_DEFAULT: - child_info->use_default = (GTK_VALUE_BOOL (*arg) != 0); - break; - case CHILD_ARG_BORDER_WIDTH: - if (!child_info->use_default) - child_info->border_width = GTK_VALUE_UINT (*arg); - break; - case CHILD_ARG_PAD_X: - if (!child_info->use_default) - child_info->pad_x = GTK_VALUE_UINT (*arg); - break; - case CHILD_ARG_PAD_Y: - if (!child_info->use_default) - child_info->pad_y = GTK_VALUE_UINT (*arg); - break; - case CHILD_ARG_I_PAD_X: - if (!child_info->use_default) - child_info->i_pad_x = GTK_VALUE_UINT (*arg); - break; - case CHILD_ARG_I_PAD_Y: - if (!child_info->use_default) - child_info->i_pad_y = GTK_VALUE_UINT (*arg); - break; - case CHILD_ARG_POSITION: - gtk_packer_reorder_child (packer, - child, - GTK_VALUE_INT (*arg)); - break; - default: - break; - } - - if (arg_id != CHILD_ARG_POSITION && - GTK_WIDGET_VISIBLE (packer) && - GTK_WIDGET_VISIBLE (child)) - gtk_widget_queue_resize (child); -} - -static void -gtk_packer_get_child_arg (GtkContainer *container, - GtkWidget *child, - GtkArg *arg, - guint arg_id) -{ - GtkPacker *packer; - GtkPackerChild *child_info = NULL; - GList * list; - - packer = GTK_PACKER (container); - - if (arg_id != CHILD_ARG_POSITION) - { - list = packer->children; - while (list) - { - child_info = list->data; - if (child_info->widget == child) - break; - - list = list->next; - } - if (!list) - { - arg->type = GTK_TYPE_INVALID; - return; - } - } - - switch (arg_id) - { - case CHILD_ARG_SIDE: - GTK_VALUE_ENUM (*arg) = child_info->side; - break; - case CHILD_ARG_ANCHOR: - GTK_VALUE_ENUM (*arg) = child_info->anchor; - break; - case CHILD_ARG_EXPAND: - GTK_VALUE_BOOL (*arg) = (child_info->options & GTK_PACK_EXPAND) != 0; - break; - case CHILD_ARG_FILL_X: - GTK_VALUE_BOOL (*arg) = (child_info->options & GTK_FILL_X) != 0; - break; - case CHILD_ARG_FILL_Y: - GTK_VALUE_BOOL (*arg) = (child_info->options & GTK_FILL_Y) != 0; - break; - case CHILD_ARG_USE_DEFAULT: - GTK_VALUE_BOOL (*arg) = child_info->use_default; - break; - case CHILD_ARG_BORDER_WIDTH: - GTK_VALUE_UINT (*arg) = child_info->border_width; - break; - case CHILD_ARG_PAD_X: - GTK_VALUE_UINT (*arg) = child_info->pad_x; - break; - case CHILD_ARG_PAD_Y: - GTK_VALUE_UINT (*arg) = child_info->pad_y; - break; - case CHILD_ARG_I_PAD_X: - GTK_VALUE_UINT (*arg) = child_info->i_pad_x; - break; - case CHILD_ARG_I_PAD_Y: - GTK_VALUE_UINT (*arg) = child_info->i_pad_y; - break; - case CHILD_ARG_POSITION: - GTK_VALUE_INT (*arg) = 0; - for (list = packer->children; list; list = list->next) - { - child_info = list->data; - if (child_info->widget == child) - break; - GTK_VALUE_INT (*arg)++; - } - if (!list) - GTK_VALUE_INT (*arg) = -1; - break; - default: - arg->type = GTK_TYPE_INVALID; - break; - } -} - -static void -gtk_packer_init (GtkPacker *packer) -{ - GTK_WIDGET_SET_FLAGS (packer, GTK_NO_WINDOW); - - packer->children = NULL; - packer->spacing = 0; -} - -void -gtk_packer_set_spacing (GtkPacker *packer, - guint spacing) -{ - g_return_if_fail (GTK_IS_PACKER (packer)); - - if (spacing != packer->spacing) - { - packer->spacing = spacing; - gtk_widget_queue_resize (GTK_WIDGET (packer)); - - g_object_notify (G_OBJECT (packer), "spacing"); - } -} - -GtkWidget* -gtk_packer_new (void) -{ - return GTK_WIDGET (gtk_type_new (GTK_TYPE_PACKER)); -} - -static void -redo_defaults_children (GtkPacker *packer) -{ - GList *list; - GtkPackerChild *child; - - list = g_list_first(packer->children); - while (list != NULL) - { - child = list->data; - - if (child->use_default) - { - child->border_width = packer->default_border_width; - child->pad_x = packer->default_pad_x; - child->pad_y = packer->default_pad_y; - child->i_pad_x = packer->default_i_pad_x; - child->i_pad_y = packer->default_i_pad_y; - gtk_widget_queue_resize (GTK_WIDGET (child->widget)); - } - list = g_list_next(list); - } -} - -void -gtk_packer_set_default_border_width (GtkPacker *packer, - guint border) -{ - g_return_if_fail (GTK_IS_PACKER (packer)); - - if (packer->default_border_width != border) - { - packer->default_border_width = border;; - redo_defaults_children (packer); - - g_object_notify (G_OBJECT (packer), "default_border_width"); - } -} -void -gtk_packer_set_default_pad (GtkPacker *packer, - guint pad_x, - guint pad_y) -{ - g_return_if_fail (GTK_IS_PACKER (packer)); - - if (packer->default_pad_x != pad_x || - packer->default_pad_y != pad_y) - { - packer->default_pad_x = pad_x; - packer->default_pad_y = pad_y; - redo_defaults_children (packer); - - g_object_freeze_notify (G_OBJECT (packer)); - if (packer->default_pad_x != pad_x) - g_object_notify (G_OBJECT (packer), "default_pad_x"); - if (packer->default_pad_y != pad_y) - g_object_notify (G_OBJECT (packer), "default_pad_y"); - g_object_thaw_notify (G_OBJECT (packer)); - } -} - -void -gtk_packer_set_default_ipad (GtkPacker *packer, - guint i_pad_x, - guint i_pad_y) -{ - g_return_if_fail (GTK_IS_PACKER (packer)); - - if (packer->default_i_pad_x != i_pad_x || - packer->default_i_pad_y != i_pad_y) { - - packer->default_i_pad_x = i_pad_x; - packer->default_i_pad_y = i_pad_y; - redo_defaults_children (packer); - - g_object_freeze_notify (G_OBJECT (packer)); - if (packer->default_i_pad_x != i_pad_x) - g_object_notify (G_OBJECT (packer), "default_ipad_x"); - if (packer->default_i_pad_y != i_pad_y) - g_object_notify (G_OBJECT (packer), "default_ipad_y"); - g_object_thaw_notify (G_OBJECT (packer)); - } -} - -static void -gtk_packer_container_add (GtkContainer *packer, GtkWidget *child) -{ - gtk_packer_add_defaults(GTK_PACKER(packer), child, - GTK_SIDE_TOP, GTK_ANCHOR_CENTER, 0); -} - -void -gtk_packer_add_defaults (GtkPacker *packer, - GtkWidget *child, - GtkSideType side, - GtkAnchorType anchor, - GtkPackerOptions options) -{ - GtkPackerChild *pchild; - - g_return_if_fail (GTK_IS_PACKER (packer)); - g_return_if_fail (GTK_IS_WIDGET (child)); - - pchild = (GtkPackerChild*) g_malloc(sizeof(GtkPackerChild)); - - pchild->widget = child; - pchild->side = side; - pchild->options = options; - pchild->anchor = anchor; - - pchild->use_default = 1; - - pchild->border_width = packer->default_border_width; - pchild->pad_x = packer->default_pad_x; - pchild->pad_y = packer->default_pad_y; - pchild->i_pad_x = packer->default_i_pad_x; - pchild->i_pad_y = packer->default_i_pad_y; - - packer->children = g_list_append(packer->children, (gpointer) pchild); - - gtk_widget_set_parent (child, GTK_WIDGET (packer)); -} - -void -gtk_packer_add (GtkPacker *packer, - GtkWidget *child, - GtkSideType side, - GtkAnchorType anchor, - GtkPackerOptions options, - guint border_width, - guint pad_x, - guint pad_y, - guint i_pad_x, - guint i_pad_y) -{ - GtkPackerChild *pchild; - - g_return_if_fail (GTK_IS_PACKER (packer)); - g_return_if_fail (GTK_IS_WIDGET (child)); - - pchild = (GtkPackerChild*) g_malloc(sizeof(GtkPackerChild)); - - pchild->widget = child; - pchild->side = side; - pchild->options = options; - pchild->anchor = anchor; - - pchild->use_default = 0; - - pchild->border_width = border_width; - pchild->pad_x = pad_x; - pchild->pad_y = pad_y; - pchild->i_pad_x = i_pad_x; - pchild->i_pad_y = i_pad_y; - - packer->children = g_list_append(packer->children, (gpointer) pchild); - - gtk_widget_set_parent (child, GTK_WIDGET (packer)); -} - -void -gtk_packer_set_child_packing (GtkPacker *packer, - GtkWidget *child, - GtkSideType side, - GtkAnchorType anchor, - GtkPackerOptions options, - guint border_width, - guint pad_x, - guint pad_y, - guint i_pad_x, - guint i_pad_y) -{ - GList *list; - GtkPackerChild *pchild; - - g_return_if_fail (GTK_IS_PACKER (packer)); - g_return_if_fail (child != NULL); - - list = g_list_first(packer->children); - while (list != NULL) - { - pchild = (GtkPackerChild*) list->data; - if (pchild->widget == child) - { - pchild->side = side; - pchild->anchor = anchor; - pchild->options = options; - - pchild->use_default = 0; - - pchild->border_width = border_width; - pchild->pad_x = pad_x; - pchild->pad_y = pad_y; - pchild->i_pad_x = i_pad_x; - pchild->i_pad_y = i_pad_y; - - if (GTK_WIDGET_VISIBLE (child) && GTK_WIDGET_VISIBLE (packer)) - gtk_widget_queue_resize (child); - return; - } - list = g_list_next(list); - } - - g_warning ("couldn't find child `%s' amongst the packer's children", gtk_type_name (GTK_OBJECT_TYPE (child))); -} - -void -gtk_packer_reorder_child (GtkPacker *packer, - GtkWidget *child, - gint position) -{ - GList *list; - - g_return_if_fail (GTK_IS_PACKER (packer)); - g_return_if_fail (child != NULL); - - list = packer->children; - while (list) - { - GtkPackerChild *child_info; - - child_info = list->data; - if (child_info->widget == child) - break; - - list = list->next; - } - - if (list && packer->children->next) - { - GList *tmp_list; - - if (list->next) - list->next->prev = list->prev; - if (list->prev) - list->prev->next = list->next; - else - packer->children = list->next; - - tmp_list = packer->children; - while (position && tmp_list->next) - { - position--; - tmp_list = tmp_list->next; - } - - if (position) - { - tmp_list->next = list; - list->prev = tmp_list; - list->next = NULL; - } - else - { - if (tmp_list->prev) - tmp_list->prev->next = list; - else - packer->children = list; - list->prev = tmp_list->prev; - tmp_list->prev = list; - list->next = tmp_list; - } - - if (GTK_WIDGET_VISIBLE (child) && GTK_WIDGET_VISIBLE (packer)) - gtk_widget_queue_resize (child); - } -} - -static void -gtk_packer_remove (GtkContainer *container, - GtkWidget *widget) -{ - GtkPacker *packer; - GtkPackerChild *child; - GList *children; - gint visible; - - g_return_if_fail (container != NULL); - g_return_if_fail (widget != NULL); - - packer = GTK_PACKER (container); - - children = g_list_first(packer->children); - while (children) - { - child = children->data; - - if (child->widget == widget) - { - visible = GTK_WIDGET_VISIBLE (widget); - gtk_widget_unparent (widget); - - packer->children = g_list_remove_link (packer->children, children); - g_list_free (children); - g_free (child); - - if (visible && GTK_WIDGET_VISIBLE (container)) - gtk_widget_queue_resize (GTK_WIDGET (container)); - - break; - } - - children = g_list_next(children); - } -} - -static void -gtk_packer_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - GtkPacker *packer; - GtkContainer *container; - GtkPackerChild *child; - GList *children; - gint nvis_vert_children; - gint nvis_horz_children; - gint width, height; - gint maxWidth, maxHeight; - - g_return_if_fail (GTK_IS_PACKER (widget)); - g_return_if_fail (requisition != NULL); - - packer = GTK_PACKER (widget); - container = GTK_CONTAINER (widget); - - requisition->width = 0; - requisition->height = 0; - nvis_vert_children = 0; - nvis_horz_children = 0; - - width = height = maxWidth = maxHeight = 0; - - children = g_list_first(packer->children); - while (children != NULL) - { - child = children->data; - - if (GTK_WIDGET_VISIBLE (child->widget)) - { - GtkRequisition child_requisition; - - gtk_widget_size_request (child->widget, &child_requisition); - - if ((child->side == GTK_SIDE_TOP) || (child->side == GTK_SIDE_BOTTOM)) - { - maxWidth = MAX (maxWidth, - (child_requisition.width + - 2 * child->border_width + - child->pad_x + child->i_pad_x + - width)); - height += (child_requisition.height + - 2 * child->border_width + - child->pad_y + child->i_pad_y); - } - else - { - maxHeight = MAX (maxHeight, - (child_requisition.height + - 2 * child->border_width + - child->pad_y + child->i_pad_y + - height)); - width += (child_requisition.width + - 2 * child->border_width + - child->pad_x + child->i_pad_x); - } - } - - children = g_list_next(children); - } - - requisition->width = MAX (maxWidth, width) + 2 * container->border_width; - requisition->height = MAX (maxHeight, height) + 2 * container->border_width; -} - -static gint -YExpansion (GList *children, - gint cavityHeight) -{ - GList *list; - GtkPackerChild *child; - GtkWidget *widget; - gint numExpand, minExpand, curExpand; - gint childHeight; - - minExpand = cavityHeight; - numExpand = 0; - - list = children; - while (list != NULL) - { - GtkRequisition child_requisition; - - child = list->data; - widget = child->widget; - gtk_widget_get_child_requisition (widget, &child_requisition); - - childHeight = (child_requisition.height + - 2 * child->border_width + - child->i_pad_y + - child->pad_y); - if ((child->side == GTK_SIDE_LEFT) || (child->side == GTK_SIDE_RIGHT)) - { - curExpand = (cavityHeight - childHeight)/numExpand; - minExpand = MIN(minExpand, curExpand); - } - else - { - cavityHeight -= childHeight; - if (child->options & GTK_PACK_EXPAND) - numExpand++; - } - list = g_list_next(list); - } - curExpand = cavityHeight/numExpand; - if (curExpand < minExpand) - minExpand = curExpand; - return (minExpand < 0) ? 0 : minExpand; -} - -static gint -XExpansion (GList *children, - gint cavityWidth) -{ - GList *list; - GtkPackerChild *child; - GtkWidget *widget; - gint numExpand, minExpand, curExpand; - gint childWidth; - - minExpand = cavityWidth; - numExpand = 0; - - list = children; - while (list != NULL) - { - GtkRequisition child_requisition; - - child = list->data; - widget = child->widget; - gtk_widget_get_child_requisition (widget, &child_requisition); - - childWidth = (child_requisition.width + - 2 * child->border_width + - child->i_pad_x + - child->pad_x); - - if ((child->side == GTK_SIDE_TOP) || (child->side == GTK_SIDE_BOTTOM)) - { - curExpand = (cavityWidth - childWidth)/numExpand; - minExpand = MIN(minExpand, curExpand); - } - else - { - cavityWidth -= childWidth; - if (child->options & GTK_PACK_EXPAND) - numExpand++; - } - list = g_list_next(list); - } - curExpand = cavityWidth/numExpand; - if (curExpand < minExpand) - minExpand = curExpand; - return (minExpand < 0) ? 0 : minExpand; -} - -static void -gtk_packer_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - GtkPacker *packer; - GtkContainer *container; - GtkAllocation child_allocation; - GList *list; - GtkPackerChild *child; - gint cavityX, cavityY; - gint cavityWidth, cavityHeight; - gint width, height, x, y; - gint frameHeight, frameWidth, frameX, frameY; - gint borderX, borderY; - - g_return_if_fail (GTK_IS_PACKER (widget)); - g_return_if_fail (allocation != NULL); - - packer = GTK_PACKER (widget); - container = GTK_CONTAINER (widget); - - x = y = 0; - - widget->allocation = *allocation; - - cavityX = widget->allocation.x + container->border_width; - cavityY = widget->allocation.y + container->border_width; - cavityWidth = widget->allocation.width - 2 * container->border_width; - cavityHeight = widget->allocation.height - 2 * container->border_width; - - list = g_list_first (packer->children); - while (list != NULL) - { - GtkRequisition child_requisition; - - child = list->data; - gtk_widget_get_child_requisition (child->widget, &child_requisition); - - if ((child->side == GTK_SIDE_TOP) || (child->side == GTK_SIDE_BOTTOM)) - { - frameWidth = cavityWidth; - frameHeight = (child_requisition.height + - 2 * child->border_width + - child->pad_y + - child->i_pad_y); - if (child->options & GTK_PACK_EXPAND) - frameHeight += YExpansion(list, cavityHeight); - cavityHeight -= frameHeight; - if (cavityHeight < 0) - { - frameHeight += cavityHeight; - cavityHeight = 0; - } - frameX = cavityX; - if (child->side == GTK_SIDE_TOP) - { - frameY = cavityY; - cavityY += frameHeight; - } - else - { - frameY = cavityY + cavityHeight; - } - } - else - { - frameHeight = cavityHeight; - frameWidth = (child_requisition.width + - 2 * child->border_width + - child->pad_x + - child->i_pad_x); - if (child->options & GTK_PACK_EXPAND) - frameWidth += XExpansion(list, cavityWidth); - cavityWidth -= frameWidth; - if (cavityWidth < 0) { - frameWidth += cavityWidth; - cavityWidth = 0; - } - frameY = cavityY; - if (child->side == GTK_SIDE_LEFT) - { - frameX = cavityX; - cavityX += frameWidth; - } - else - { - frameX = cavityX + cavityWidth; - } - } - - borderX = child->pad_x + 2 * child->border_width; - borderY = child->pad_y + 2 * child->border_width; - - width = (child_requisition.width + - 2 * child->border_width + - child->i_pad_x); - if ((child->options & GTK_FILL_X) || (width > (frameWidth - borderX))) - width = frameWidth - borderX; - - height = (child_requisition.height + - 2 * child->border_width + - child->i_pad_y); - if ((child->options & GTK_FILL_Y) || (height > (frameHeight - borderY))) - height = frameHeight - borderY; - - borderX /= 2; - borderY /= 2; - switch (child->anchor) - { - case GTK_ANCHOR_N: - x = frameX + (frameWidth - width)/2; - y = frameY + borderY; - break; - case GTK_ANCHOR_NE: - x = frameX + frameWidth - width - borderX; - y = frameY + borderY; - break; - case GTK_ANCHOR_E: - x = frameX + frameWidth - width - borderX; - y = frameY + (frameHeight - height)/2; - break; - case GTK_ANCHOR_SE: - x = frameX + frameWidth - width - borderX; - y = frameY + frameHeight - height - borderY; - break; - case GTK_ANCHOR_S: - x = frameX + (frameWidth - width)/2; - y = frameY + frameHeight - height - borderY; - break; - case GTK_ANCHOR_SW: - x = frameX + borderX; - y = frameY + frameHeight - height - borderY; - break; - case GTK_ANCHOR_W: - x = frameX + borderX; - y = frameY + (frameHeight - height)/2; - break; - case GTK_ANCHOR_NW: - x = frameX + borderX; - y = frameY + borderY; - break; - case GTK_ANCHOR_CENTER: - x = frameX + (frameWidth - width)/2; - y = frameY + (frameHeight - height)/2; - break; - default: - g_warning ("gtk_packer_size_allocate(): bad anchor type: %d", child->anchor); - } - - if (width <= 0 || height <= 0) - { - gtk_widget_set_child_visible (child->widget, FALSE); - } - else - { - child_allocation.x = x; - child_allocation.y = y; - child_allocation.width = width; - child_allocation.height = height; - gtk_widget_size_allocate (child->widget, &child_allocation); - - gtk_widget_set_child_visible (child->widget, TRUE); - } - - list = g_list_next(list); - } -} - -static void -gtk_packer_forall (GtkContainer *container, - gboolean include_internals, - GtkCallback callback, - gpointer callback_data) -{ - GtkPacker *packer; - GtkPackerChild *child; - GList *children; - - g_return_if_fail (GTK_IS_PACKER (container)); - g_return_if_fail (callback != NULL); - - packer = GTK_PACKER (container); - - children = g_list_first (packer->children); - while (children != NULL) - { - child = children->data; - children = g_list_next(children); - - (* callback) (child->widget, callback_data); - } -} - diff --git a/gtk/gtkpacker.h b/gtk/gtkpacker.h deleted file mode 100644 index 4c30a934d2..0000000000 --- a/gtk/gtkpacker.h +++ /dev/null @@ -1,149 +0,0 @@ -/* GTK - The GIMP Toolkit - * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald - * - * GtkPacker Widget - * Copyright (C) 1998 Shawn T. Amundson, James S. Mitchell, Michael L. Staiger - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -/* - * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS - * file for a list of people on the GTK+ Team. See the ChangeLog - * files for a list of changes. These files are distributed with - * GTK+ at ftp://ftp.gtk.org/pub/gtk/. - */ - -#ifndef GTK_DISABLE_DEPRECATED - -#ifndef __GTK_PACKER_H__ -#define __GTK_PACKER_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - - -#define GTK_TYPE_PACKER (gtk_packer_get_type ()) -#define GTK_PACKER(obj) (GTK_CHECK_CAST ((obj), GTK_TYPE_PACKER, GtkPacker)) -#define GTK_PACKER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), GTK_TYPE_PACKER, GtkPackerClass)) -#define GTK_IS_PACKER(obj) (GTK_CHECK_TYPE ((obj), GTK_TYPE_PACKER)) -#define GTK_IS_PACKER_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PACKER)) -#define GTK_PACKER_GET_CLASS(obj) (GTK_CHECK_GET_CLASS ((obj), GTK_TYPE_PACKER, GtkPackerClass)) - - -typedef struct _GtkPacker GtkPacker; -typedef struct _GtkPackerClass GtkPackerClass; -typedef struct _GtkPackerChild GtkPackerChild; - -typedef enum -{ - GTK_PACK_EXPAND = 1 << 0, /*< nick=expand >*/ - GTK_FILL_X = 1 << 1, - GTK_FILL_Y = 1 << 2 -} GtkPackerOptions; - -struct _GtkPackerChild -{ - GtkWidget *widget; - - GtkAnchorType anchor; - GtkSideType side; - GtkPackerOptions options; - - guint use_default : 1; - - guint border_width : 16; - guint pad_x : 16; - guint pad_y : 16; - guint i_pad_x : 16; - guint i_pad_y : 16; -}; - -struct _GtkPacker -{ - GtkContainer parent; - - GList *children; - - guint spacing; - - guint default_border_width : 16; - guint default_pad_x : 16; - guint default_pad_y : 16; - guint default_i_pad_x : 16; - guint default_i_pad_y : 16; -}; - -struct _GtkPackerClass -{ - GtkContainerClass parent_class; -}; - - -GtkType gtk_packer_get_type (void) G_GNUC_CONST; -GtkWidget* gtk_packer_new (void); -void gtk_packer_add_defaults (GtkPacker *packer, - GtkWidget *child, - GtkSideType side, - GtkAnchorType anchor, - GtkPackerOptions options); -void gtk_packer_add (GtkPacker *packer, - GtkWidget *child, - GtkSideType side, - GtkAnchorType anchor, - GtkPackerOptions options, - guint border_width, - guint pad_x, - guint pad_y, - guint i_pad_x, - guint i_pad_y); -void gtk_packer_set_child_packing (GtkPacker *packer, - GtkWidget *child, - GtkSideType side, - GtkAnchorType anchor, - GtkPackerOptions options, - guint border_width, - guint pad_x, - guint pad_y, - guint i_pad_x, - guint i_pad_y); -#define gtk_packer_configure gtk_packer_set_child_packing -void gtk_packer_reorder_child (GtkPacker *packer, - GtkWidget *child, - gint position); -void gtk_packer_set_spacing (GtkPacker *packer, - guint spacing); -void gtk_packer_set_default_border_width (GtkPacker *packer, - guint border); -void gtk_packer_set_default_pad (GtkPacker *packer, - guint pad_x, - guint pad_y); -void gtk_packer_set_default_ipad (GtkPacker *packer, - guint i_pad_x, - guint i_pad_y); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ - - -#endif /* __GTK_PACKER_H__ */ - -#endif /* GTK_DISABLE_DEPRECATED */ -- 2.30.2